home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / iconv8_s.arc / ICONT.ARC / TMEM.C < prev    next >
C/C++ Source or Header  |  1990-03-28  |  3KB  |  108 lines

  1. /*
  2.  * tmem.c -- memory initialization and allocation for the translator.
  3.  */
  4.  
  5. #include "..\h\config.h"
  6. #include "general.h"
  7. #include "tproto.h"
  8. #include "globals.h"
  9. #include "trans.h"
  10. #include "..\h\memsize.h"
  11. #include "tsym.h"
  12. #include "tree.h"
  13.  
  14. struct tlentry **lhash;        /* hash area for local table */
  15. struct tgentry **ghash;        /* hash area for global table */
  16. struct tcentry **chash;        /* hash area for constant table */
  17. struct tientry **ihash;        /* hash area for identifier table */
  18.  
  19. nodeptr tree;            /* parse tree space */
  20. nodeptr tend;            /* end of parse tree space */
  21. struct tlentry *ltable;        /* local table */
  22. struct tgentry *gtable;        /* global table */
  23. struct tcentry *ctable;        /* constant table */
  24. struct tientry *itable;        /* identifier table */
  25.  
  26. char *strings;            /* string space */
  27. char *stre;            /* end of string space */
  28.  
  29. nodeptr tfree;            /* free pointer for parse tree space */
  30. struct tlentry *lfree;        /* free pointer for local table */
  31. struct tgentry *gfree;        /* free pointer for global table */
  32. struct tcentry *ctfree;        /* free pointer to constant table */
  33. struct tientry *ifree;        /* free pointer for identifier table */
  34. char *strf;            /* free pointer for string space */
  35.  
  36.  
  37. /*
  38.  * tmalloc - allocate memory for the translator
  39.  */
  40.  
  41. novalue tmalloc()
  42. {
  43.    chash = (struct tcentry **) tcalloc(chsize, sizeof (struct tcentry *));
  44.    ghash = (struct tgentry **) tcalloc(ghsize, sizeof (struct tgentry *));
  45.    ihash = (struct tientry **) tcalloc(ihsize, sizeof (struct tientry *));
  46.    lhash = (struct tlentry **) tcalloc(lhsize, sizeof (struct tlentry *));
  47.  
  48.    ctable = (struct tcentry *) tcalloc(csize, sizeof (struct tcentry));
  49.    gtable = (struct tgentry *) tcalloc(gsize, sizeof (struct tgentry));
  50.    itable = (struct tientry *) tcalloc(isize, sizeof (struct tientry));
  51.    ltable = (struct tlentry *) tcalloc(lsize, sizeof (struct tlentry));
  52.  
  53.    strings = (char *) tcalloc(stsize, sizeof(char));
  54.    stre = strings + stsize;
  55.  
  56.    tree = (nodeptr) tcalloc(tsize, sizeof(word));
  57.    tend = (nodeptr) ((word *)tree + tsize);
  58.    }
  59.  
  60. /*
  61.  * meminit - clear tables for use in translating the next file
  62.  */
  63. novalue tminit()
  64.    {
  65.    register struct tlentry **lp;
  66.    register struct tgentry **gp;
  67.    register struct tcentry **cp;
  68.    register struct tientry **ip;
  69.  
  70.    /*
  71.     * Reset the free pointer for each region.
  72.     */
  73.    lfree = ltable;
  74.    gfree = gtable;
  75.    ctfree = ctable;
  76.    ifree = itable;
  77.    strf = strings;
  78.    tfree = tree;
  79.    /*
  80.     * Zero out the hash tables.
  81.     */
  82.    for (lp = lhash; lp < &lhash[lhsize]; lp++)
  83.       *lp = NULL;
  84.    for (gp = ghash; gp < &ghash[ghsize]; gp++)
  85.       *gp = NULL;
  86.    for (cp = chash; cp < &chash[chsize]; cp++)
  87.       *cp = NULL;
  88.    for (ip = ihash; ip < &ihash[ihsize]; ip++)
  89.       *ip = NULL;
  90.    }
  91.  
  92. /*
  93.  * tmfree - free memory used by the translator
  94.  */
  95. novalue tmfree()
  96.    {
  97.    free((char *) chash);   chash = NULL;
  98.    free((char *) ghash);   ghash = NULL;
  99.    free((char *) ihash);   ihash = NULL;
  100.    free((char *) lhash);   lhash = NULL;
  101.    free((char *) ctable);  ctable = NULL;
  102.    free((char *) gtable);  gtable = NULL;
  103.    free((char *) itable);  itable = NULL;
  104.    free((char *) ltable);  ltable = NULL;
  105.    free((char *) strings); strings = NULL;
  106.    free((char *) tree);    tree = NULL;
  107.    }
  108.